<?php
if (! defined('IN_SITE')) {
	exit('invalid request');
}

/** getui root directory */
if (!defined('GETUI_ROOT')) {
    define('GETUI_ROOT', dirname(__FILE__) . '/');
    require(GETUI_ROOT . 'getui/IGt.Push.php');
}

// 个推账号设置
define('GETUI_HOST'			,$GLOBALS['config']['GETUI_HOST']);			//个推HOST
define('GETUI_HOSTS'		,$GLOBALS['config']['GETUI_HOSTS']);		//个推HOSTS
define('GETUI_SSL'			,$GLOBALS['config']['GETUI_SSL']);			//个推是否采用HTTPS
define('GETUI_APPKEY'		,$GLOBALS['config']['GETUI_APPKEY']);		//个推APPKEY
define('GETUI_APPID'		,$GLOBALS['config']['GETUI_APPID']);		//个推APPID
define('GETUI_MASTERSECRET' ,$GLOBALS['config']['GETUI_MASTERSECRET']);	//个推MASTERSECRET

// 接口：http://docs.igetui.com/display/Doc/PHP
class GeTui{

	public function __construct(){

	}

	/**
	 * 指定应用群推送接口
	 * @param array $messageArr 	信息体设置	TODO:消息模版形式
	 * @param array $selectTemplate 选择消息模版TODO:消息模版种类
	 * @param array $templateArr 	消息模版	TODO:消息模版内容
	 * @return array $rep
	 */
	function pushMessageToApp($messageArr,$selectTemplate,$templateArr)
	{
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}

	    /**
	     * TODO:消息模版
	     * 1.TransmissionTemplate:透传功能模板
	     * 2.LinkTemplate:通知打开链接功能模板
	     * 3.NotificationTemplate：通知透传功能模板
	     * 4.NotyPopLoadTemplate：通知弹框下载功能模板(不支持IOS)
	     */
		switch($selectTemplate){
			case 1:
				$template = self::IGtTransmissionTemplateDemo($templateArr);
				break;
			case 2:
				$template = self::IGtLinkTemplateDemo($templateArr);
				break;
			case 3:
				$template = self::IGtNotificationTemplateDemo($templateArr);
				break;
			case 4:
				$template = self::IGtNotyPopLoadTemplateDemo($templateArr);
				break;
			default:
				return;
				break;
		}

		//基于应用消息体
		$messageArr['template'] = $template;
		$message = self::IGtAppMessageDemo($messageArr);

		try {
			$rep = $igt->pushMessageToApp($message);
			return $rep;
		}catch(Exception $e){
			return $e->getMessage();
		}
	}

	/**
	 * 单推接口通知
	 * @param array $userInfo 		接收方信息  	IGtTargetDemo
	 * @param array $messageArr 	信息体设置	TODO:消息模版形式
	 * @param array $selectTemplate 选择消息模版TODO:消息模版种类
	 * @param array $templateArr 	消息模版	TODO:消息模版内容
	 * @return array $rep ["taskId"=>"","result"=>"","status"=>""]
	 */
	function pushMessageToSingle($userInfo,$messageArr,$selectTemplate,$templateArr){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}

	    /**
	     * TODO:消息模版
	     * 1.TransmissionTemplate:透传功能模板
	     * 2.LinkTemplate:通知打开链接功能模板
	     * 3.NotificationTemplate：通知透传功能模板
	     * 4.NotyPopLoadTemplate：通知弹框下载功能模板(不支持IOS)
	     */
		switch($selectTemplate){
			case 1:
				$template = self::IGtTransmissionTemplateDemo($templateArr);
				break;
			case 2:
				$template = self::IGtLinkTemplateDemo($templateArr);
				break;
			case 3:
				$template = self::IGtNotificationTemplateDemo($templateArr);
				break;
			case 4:
				$template = self::IGtNotyPopLoadTemplateDemo($templateArr);
				break;
			default:
				return;
				break;
		}
	    //个推信息体
	    $messageArr['template'] = $template;
	    $message = self::IGtSingleMessageDemo($messageArr);

	    //接收方
		$target = self::IGtTargetDemo($userInfo);

		try {
			$rep = $igt->pushMessageToSingle($message, $target);
			return $rep;
		}catch(Exception $e){
			return $e->getMessage();
		}
	}

	/**
	 * 群推接口通知
	 * @param array $userInfo 		接收方信息		[["clientId"=>"abc","alias"=>""],["clientId"=>"abc","alias"=>""]]
	 * @param array $messageArr 	信息体设置		TODO:消息模版形式
	 * @param array $selectTemplate 选择消息模版	TODO:消息模版种类
	 * @param array $templateArr 	消息模版		TODO:消息模版内容
	 * @return array
	 */
	function pushMessageToList($userInfo,$messageArr,$selectTemplate,$templateArr){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}

		switch($selectTemplate){
			case 1:
				$template = self::IGtTransmissionTemplateDemo($templateArr);
				break;
			case 2:
				$template = self::IGtLinkTemplateDemo($templateArr);
				break;
			case 3:
				$template = self::IGtNotificationTemplateDemo($templateArr);
				break;
			case 4:
				$template = self::IGtNotyPopLoadTemplateDemo($templateArr);
				break;
			default:
				return;
				break;
		}

		//群推信息体
		$messageArr['template'] = $template;
		$message = self::IGtListMessageDemo($messageArr);
		$contentId = $igt->getContentId($message);

		//接收方
		$targetList = [];
		foreach($userInfo AS $v){
			$targetList[] = self::IGtTargetDemo($v);
		}

		try {
			$rep = $igt->pushMessageToList($contentId, $targetList);
			return $rep;
		}catch(Exception $e){
			return $e->getMessage();
		}

	}

	//适用于IOS单推接口
	function pushMessageToSingleIOS($messageInfo,$templateArr,$deviceToken,$isSimple = true){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}
		if($isSimple){
			$template = self::IGtTransmissionTemplateSimpleDemoForIOS($templateArr);
		}else{
			$template = self::IGtTransmissionTemplateDictionaryDemoForIOS($templateArr);
		}

		$messageInfo['template'] = $template;
		$message = self::IGtSingleMessageDemo($messageInfo);

		$ret = $igt->pushAPNMessageToSingle(GETUI_APPID, $deviceToken, $message);
		return $ret;
	}

	//适用于IOS群推接口
	function pushMessageToListIOS($messageInfo,$templateArr,$deviceTokenList,$isSimple = true){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}

		if($isSimple){
			$template = self::IGtTransmissionTemplateSimpleDemoForIOS($templateArr);
		}else{
			$template = self::IGtTransmissionTemplateDictionaryDemoForIOS($templateArr);
		}

		$messageInfo['template'] = $template;
		$listmessage = self::IGtListMessageDemo($messageInfo);

		$contentId = $igt->getAPNContentId(GETUI_APPID, $listmessage);
		$ret = $igt->pushAPNMessageToList(GETUI_APPID, $contentId, $deviceTokenList);
		return $ret;
	}

	/**
	 * 单推信息体参数设置
	 * @param array $arr
	 * 	  		[
	 *				"isOffline"			=>false,		//是否离线
	 *				"offlineExpireTime"	=>3600*12*1000,	//离线时间
	 *				"PushNetWorkType"	=>0,			//设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
	 * 			]
	 * @return IGtSingleMessage
	 */
	function IGtSingleMessageDemo($messageInfo){
		$message = new IGtSingleMessage();
		$message->set_isOffline($messageInfo['isOffline']);					//是否离线
		$message->set_offlineExpireTime($messageInfo['offlineExpireTime']);	//离线时间
		$message->set_data($messageInfo['template']);						//设置推送消息类型，获取模版
		$message->set_PushNetWorkType($messageInfo['PushNetWorkType']);		//设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
		return $message;
	}

	/**
	 * 群推信息体参数设置
	 * @param array $arr
	 * 	  		[
	 *				"isOffline"			=>false,		//是否离线
	 *				"offlineExpireTime"	=>3600*12*1000,	//离线时间
	 *				"PushNetWorkType"	=>0,			//设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
	 * 			]
	 * @return IGtSingleMessage
	 */
	function IGtListMessageDemo($messageInfo){
		$message = new IGtListMessage();
		$message->set_isOffline($messageInfo['isOffline']);
		$message->set_offlineExpireTime($messageInfo['offlineExpireTime']);
		$message->set_data($messageInfo['template']);
		$message->set_PushNetWorkType($messageInfo['PushNetWorkType']);
		return $message;
	}

	/**
	 * 特定应用群信息体参数设置
	 * @param array $arr
	 * 	  		[
	 *				"isOffline"			=>false,		//是否离线
	 *				"offlineExpireTime"	=>3600*12*1000,	//离线时间
	 *				"PushNetWorkType"	=>0,			//设置是否根据WIFI推送消息，1为wifi推送，0为不限制推送
	 *				"speed"				=>0,			//设置群推接口的推送速度，单位为条/秒，例如填写100，则为100条/秒。仅对指定应用群推接口有效。
	 *				"appIdList"			=>[appid,...],	//设置推送的appid
	 *				"phoneTypeList"		=>['ANDROID']	//设置手机类型限制列表
	 * 			]
	 * @return IGtAppMessage
	 */
	function IGtAppMessageDemo($messageInfo){
		$message = new IGtAppMessage();
		$message->set_isOffline($messageInfo['isOffline']);
		$message->set_offlineExpireTime($messageInfo['offlineExpireTime']);
		$message->set_data($messageInfo['template']);
		$message->set_PushNetWorkType($messageInfo['PushNetWorkType']);
		$message->set_speed($messageInfo['speed']);
		$message->set_appIdList($messageInfo['appIdList']);
		$message->set_phoneTypeList($messageInfo["phoneTypeList"]);
		return $message;
	}

	/**
	 * 接收方设置
	 * @param $arr
	 * 			["clientId"=>"abc","alias"=>""]
	 * @return IGtTarget
	 */
	function IGtTargetDemo($targetInfo){
		$target = new IGtTarget();
		$target->set_appId(GETUI_APPID);
		$target->set_clientId($targetInfo['clientId']);
		if($targetInfo['alias']){
			$target->set_alias($targetInfo['alias']);
		}
		return $target;
	}

	/**
	 * 停止任务
	 * @param string $taskId
	 */
	function stoptask($taskId){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}
		$igt->stop($taskId);
	}

	/**
	 * 获取用户当前状态
	 * @param string $cid 客户端ID
	 * @return array ['result'=>"online"]/["result"=>"Offline","lastLogin"=>""]
	 */
	function getUserStatus($cid) {
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}
		$rep = $igt->getClientIdStatus(GETUI_APPID,$cid);
		return $rep;
	}

	/**
	 * 查询任务——数据在30分钟提供查询
	 * @param string $taskId
	 * @return
	 */
	function getPushResult($taskId){
		$params = array();
		$params["action"] = "getPushMsgResult";
		$params["appkey"] = GETUI_APPKEY;
		$params["taskId"] = $taskId;
		$sign = self::createSign($params,GETUI_MASTERSECRET);
		$params["sign"] = $sign;
		$data=json_encode($params);
		if(GETUI_SSL){
			$result = self::httpPost(GETUI_HOSTS,$data);
		}else{
			$result = self::httpPost(GETUI_HOST,$data);
		}

		return $result;
	}

	/**
	 * 获取单日用户数据:调用此接口可以获取某个应用单日的用户数据（用户数据包括：新增用户数，累计注册用户总数，在线峰值，日联网用户数）（目前只支持查询1天前的数据）
	 * @param string $day "20160227"
	 * @return array
	 */
	function getDayUserData($day){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}
		$ret = $igt->queryAppUserDataByDate(GETUI_APPID,$day);
		return $ret;
	}

	/**
	 * 获取单日推送数据:调用此接口可以获取某个应用单日的推送数据（推送数据包括：发送总数，在线发送数，接收数，展示数，点击数）（目前只支持查询1天前的数据）
	 * @param string $day
	 * @return array
	 */
	function getDayPushData($day){
		if(GETUI_SSL){
			$igt = new IGeTui(GETUI_HOSTS,GETUI_APPKEY,GETUI_MASTERSECRET,GETUI_SSL);
		}else{
			$igt = new IGeTui(GETUI_HOST,GETUI_APPKEY,GETUI_MASTERSECRET);
		}
		$ret = $igt->queryAppPushDataByDate(GETUI_APPID,$day);
		return $ret;
	}

	/**
	 * TransmissionTemplate：透传功能模板，数据经SDK传给您的客户端，由您写代码决定如何处理展现给用户
	 * @param array $templateInfo 通知主体设置
	 * 			[
	 * 				"transmissionType"=>1,			//透传消息类型 1立即启动2则广播等待客户端自启动
	 * 				"transmissionContent"=>["title"=>"信息标题","payload"=>"处理逻辑","content"=>"信息内容"],
	 * 			]
	 * @return IGtTransmissionTemplate
	 */
	function IGtTransmissionTemplateDemo($templateInfo){
		$template =  new IGtTransmissionTemplate();
		$template->set_appId(GETUI_APPID);			//应用appid
		$template->set_appkey(GETUI_APPKEY);		//应用appkey
		$template->set_transmissionType($templateInfo['transmissionType']);
		$template->set_transmissionContent($templateInfo['transmissionContent']);
		// iOS推送需要设置的pushInfo字段
		//$template ->set_pushInfo($actionLocKey,$badge,$message,$sound,$payload,$locKey,$locArgs,$launchImage);
		if($templateInfo["message"]){
				$template ->set_pushInfo($templateInfo["actionLocKey"],
				$templateInfo["badge"],
				$templateInfo["message"],
				$templateInfo["sound"],
				$templateInfo["payload"],
				$templateInfo["locKey"],
				$templateInfo["locArgs"],
				$templateInfo["launchImage"]);
		}
		return $template;
	}

	/**
	 * LinkTemplate：通知链接打开模版，在通知栏显示一条含图标、标题等的通知，用户点击可打开您指定的网页（iOS不推荐使用该模板，详情请看iOS模板说明）
	 * @param array $templateInfo 通知主体设置
	 *			[
	 *				"title" =>"请输入通知标题",
	 *				"text" =>"请输入通知内容",
	 *				"logo" =>"logo.png",
	 *				"logoURL" =>"www.hornet.com/logo.png",
	 *				"isRing" =>true,
	 *				"isVibrate" =>true,
	 *				"isClearable" =>true,
	 *				"url" =>"http://www.igetui.com/",
	 *				"duration" =>false,
	 *				"beginTime" =>,
	 *				"endTime" =>,
	 *			]
	 * @return IGtLinkTemplate
	 */
	function IGtLinkTemplateDemo($templateInfo){
		$template =  new IGtLinkTemplate();
		$template ->set_appId(GETUI_APPID);							//应用appid
		$template ->set_appkey(GETUI_APPKEY);						//应用appkey
		$template ->set_title($templateInfo['title']);      		//通知栏标题
		$template ->set_text($templateInfo['text']);     			//通知栏内容
		$template ->set_logo($templateInfo['logo']);         		//通知栏logo
		$template ->set_logoURL($templateInfo['logoURL']);   		//通知栏logo链接
		$template ->set_isRing($templateInfo['isRing']);    		//是否响铃
		$template ->set_isVibrate($templateInfo['isVibrate']);  	//是否震动
		$template ->set_isClearable($templateInfo['isClearable']);	//通知栏是否可清除
		$template ->set_url($templateInfo['url']); 					//打开连接地址
		//设置通知定时展示时间，结束时间与开始时间相差需大于6分钟，消息推送后，客户端将在指定时间差内展示消息（误差6分钟）
		if($templateInfo['duration']){
			$begin = data("Y-m-d H:i:s",$templateInfo['beginTime']);
			$end = data("Y-m-d H:i:s",$templateInfo['endTime']);
			$template->set_duration($begin,$end);
		}

		// iOS推送需要设置的pushInfo字段
		//$template ->set_pushInfo($actionLocKey,$badge,$message,$sound,$payload,$locKey,$locArgs,$launchImage);
		if($templateInfo["message"]){
				$template ->set_pushInfo($templateInfo["actionLocKey"],
				$templateInfo["badge"],
				$templateInfo["message"],
				$templateInfo["sound"],
				$templateInfo["payload"],
				$templateInfo["locKey"],
				$templateInfo["locArgs"],
				$templateInfo["launchImage"]);
		}
		return $template;
	}

	/**
	 * NotificationTemplate：通知透传功能模板，在通知栏显示一条含图标、标题等的通知，用户点击后激活您的应用（iOS不推荐使用该模板，详情请看iOS模板说明）
	 * @param array $templateInfo
	 * 			[
	 * 				"transmissionType"		=>1,
	 * 				"transmissionContent"	=>"测试离线",
	 * 				"title"					=>"个推",
	 * 				"text"					=>"个推最新版点击下载",
	 * 				"logo"					=>"logo.png",
	 * 				"logoURL"				=>"http://wwww.igetui.com/logo.png",
	 * 				"isRing"				=>true,
	 * 				"isVibrate"				=>true,
	 * 				"isClearable"			=>true,
	 * 			]
	 * @return IGtNotificationTemplate
	 */
	function IGtNotificationTemplateDemo($templateInfo){
		$template =  new IGtNotificationTemplate();
		$template->set_appId(GETUI_APPID);          			//应用appid
		$template->set_appkey(GETUI_APPKEY);        			//应用appkey
		$template->set_transmissionType($templateInfo['transmissionType']);			//透传消息类型 1立即启动2则广播等待客户端自启动
		$template->set_transmissionContent($templateInfo['transmissionContent']);	//透传内容
		$template->set_title($templateInfo['title']);           //通知栏标题
		$template->set_text($templateInfo['text']);        		//通知栏内容
		$template->set_logo($templateInfo['logo']);            	//通知栏logo
		$template->set_logoURL($templateInfo['logoURL']); 		//通知栏logo链接
		$template->set_isRing($templateInfo['isRing']);         //是否响铃
		$template->set_isVibrate($templateInfo['isVibrate']);   //是否震动
		$template->set_isClearable($templateInfo['isClearable']);//通知栏是否可清除
		// iOS推送需要设置的pushInfo字段
		//$template ->set_pushInfo($actionLocKey,$badge,$message,$sound,$payload,$locKey,$locArgs,$launchImage);
		if($templateInfo["message"]){
				$template ->set_pushInfo($templateInfo["actionLocKey"],
				$templateInfo["badge"],
				$templateInfo["message"],
				$templateInfo["sound"],
				$templateInfo["payload"],
				$templateInfo["locKey"],
				$templateInfo["locArgs"],
				$templateInfo["launchImage"]);
		}
		return $template;
	}

	/**
	 * NotyPopLoadTemplate：通知弹框下载功能模板，在通知栏显示一条含图标、标题等的通知，用户点击后弹出框，用户可以选择直接下载应用或者取消下载应用。（iOS不支持该模板）
	 * @param array $templateInfo 通知主体设置
	 *	  		[
	 *				"notyTitle" 	=> "",
	 *	  			"notyContent" 	=> "",
	 *	  			"notyIcon" 		=> "",
	 * 	  			"isBelled" 		=> true,
	 *	  			"isVibrationed" => true,
	 *	  			"isCleared" 	=> true,
	 *	  			"popTitle" 		=> "",
	 *	  			"popContent" 	=> "",
	 *	  			"popImage" 		=> "",
	 *	  			"popButton1" 	=> "",
	 *	  			"popButton2" 	=> "",
	 *	  			"loadIcon" 		=> "",
	 *	  			"loadTitle" 	=> "",
	 *	  			"loadUrl" 		=> "",
	 *	  			"isAutoInstall" => false,
	 *	  			"isActived" 	=> true,
	 *	  			"duration" 		=> false, //是否定时
	 *	  			"beginTime" 	=> "",
	 *	  			"endTime" 		=> "",
	 *			]
	 * @return IGtNotyPopLoadTemplate
	 */
	function IGtNotyPopLoadTemplateDemo($templateInfo){
		$template =  new IGtNotyPopLoadTemplate();
		$template ->set_appId(GETUI_APPID);                     //应用appid
		$template ->set_appkey(GETUI_APPKEY);                   //应用appkey
		//通知栏
		$template ->set_notyTitle($templateInfo['notyTitle']);          //通知栏标题
		$template ->set_notyContent($templateInfo['notyContent']); 		//通知栏内容
		$template ->set_notyIcon($templateInfo['notyIcon']);            //通知栏logo
		$template ->set_isBelled($templateInfo['isBelled']);            //是否响铃
		$template ->set_isVibrationed($templateInfo['isVibrationed']);  //是否震动
		$template ->set_isCleared($templateInfo['isCleared']);          //通知栏是否可清除
		//弹框
		$template ->set_popTitle($templateInfo['popTitle']);            //弹框标题
		$template ->set_popContent($templateInfo['popContent']);        //弹框内容
		$template ->set_popImage($templateInfo['popImage']);            //弹框图片
		$template ->set_popButton1($templateInfo['popButton1']);        //弹框左键
		$template ->set_popButton2($templateInfo['popButton2']);        //弹框右键
		//下载
		$template ->set_loadIcon($templateInfo['loadIcon']);			//下载图标
		$template ->set_loadTitle($templateInfo['loadTitle']);			//下载标题
		$template ->set_loadUrl($templateInfo['loadUrl']);				//下载链接
		$template ->set_isAutoInstall($templateInfo['isAutoInstall']); 	//是否自动安装
		$template ->set_isActived($templateInfo['isActived']);			//是否自动启动

		//设置通知定时展示时间，结束时间与开始时间相差需大于6分钟，消息推送后，客户端将在指定时间差内展示消息（误差6分钟）
		if($templateInfo['duration']){
			$begin = data("Y-m-d H:i:s",$templateInfo['beginTime']);
			$end = data("Y-m-d H:i:s",$templateInfo['endTime']);
			$template->set_duration($begin,$end);
		}
		// iOS推送需要设置的pushInfo字段
		//$template ->set_pushInfo($actionLocKey,$badge,$message,$sound,$payload,$locKey,$locArgs,$launchImage);
		if($templateInfo["message"]){
				$template ->set_pushInfo($templateInfo["actionLocKey"],
				$templateInfo["badge"],
				$templateInfo["message"],
				$templateInfo["sound"],
				$templateInfo["payload"],
				$templateInfo["locKey"],
				$templateInfo["locArgs"],
				$templateInfo["launchImage"]);
		}
		return $template;
	}

	/**
	 * 适用于IOS透传简单模版
	 * @param $templateArr
	 * 		[
	 *			"transmissionType"		=>1,
	 *			"transmissionContent"	=>"透传内容",
	 *			"alertMsg"				=>"",
	 *			"badge"					=>"3",
	 *			"sound"					=>"",
	 *			"add_customMsg"			=>[k=>v],
	 *			"contentAvailable"		=>1,
	 *			"category"				=>"ACTIONABLE",
	 * 		]
	 */
	function IGtTransmissionTemplateSimpleDemoForIOS($templateArr){
		$template =  new IGtTransmissionTemplate();
		$template->set_appId(GETUI_APPID);
		$template->set_appkey(GETUI_APPKEY);
		$template->set_transmissionType($templateArr["transmissionType"]);//透传类型1立即启动，2等待启动
		$template->set_transmissionContent($templateArr["transmissionContent"]);//透传内容

		//APN简单推送
		$apn = new IGtAPNPayload();
		$alertmsg=new SimpleAlertMsg();
		$alertmsg->alertMsg	= $templateArr["alertMsg"];
		$apn->alertMsg		= $alertmsg;
		$apn->badge			= $templateArr["badge"];//应用icon上显示的数字
		$apn->sound			= $templateArr["sound"];//通知铃声文件名
		foreach($templateArr["add_customMsg"] as $k=>$v){
			$apn->add_customMsg($k,$v);				//增加自定义的数据
		}
		$apn->contentAvailable = $templateArr["contentAvailable"];//推送直接带有透传数据
		$apn->category		=$templateArr["category"];//在客户端通知栏触发特定的action和button显示
		$template->set_apnInfo($apn);
		return $template;
	}

	/**
	 * 适用于IOS透传高级模版
	 * @param $templateArr
	 * 		[
	 *			"transmissionType"		=>1,
	 *			"transmissionContent"	=>"透传内容",
	 *			"body"					=>"通知文本消息",
	 *			"actionLockey"			=>"",
	 *			"locKey"				=>"",
	 *			"locArgs"				=>array("locargs"),
	 *			"launchImage"			=>1,
	 *			"title"					=>"通知标题",
	 *			"titleLocKey"			=>"",
	 *			"titleLocArgs"			=>array("TitleLocArg"),
	 *			"badge"					=>"3",
	 *			"sound"					=>"",
	 *			"add_customMsg"			=>[k=>v],
	 *			"contentAvailable"		=>1,
	 *			"category"				=>"ACTIONABLE",
	 * 		]
	 */
	function IGtTransmissionTemplateDictionaryDemoForIOS($templateArr){
		$template =  new IGtTransmissionTemplate();
		$template->set_appId(GETUI_APPID);
		$template->set_appkey(GETUI_APPKEY);
		$template->set_transmissionType($templateArr["transmissionType"]);//透传类型1立即启动，2等待启动
		$template->set_transmissionContent($templateArr["transmissionContent"]);//透传内容

		//APN高级推送
		$apn = new IGtAPNPayload();
		$alertmsg=new DictionaryAlertMsg();
		$alertmsg->body 			= $templateArr['body'];			//通知文本消息字符串

		if($templateArr["actionLockey"]){
			$alertmsg->actionLocKey = $templateArr["actionLockey"];	//(用于多语言支持）指定执行按钮所使用的Localizable.strings
		}
		if($templateArr["locKey"]){
			$alertmsg->locKey 		= $templateArr["locKey"];		//(用于多语言支持）指定Localizable.strings文件中相应的key
		}
		if($templateArr["locArgs"]){
			$alertmsg->locArgs 		= $templateArr["locArgs"];		//如果loc-key中使用的占位符，则在loc-args中指定各参数
		}
		if($templateArr["launchImage"]){
			$alertmsg->launchImage 	= $templateArr["launchImage"];	//指定启动界面图片名
		}

		//        IOS8.2 支持
		$alertmsg->title 			= $templateArr["title"];		//通知标题
		if($templateArr["titleLocKey"]){
			$alertmsg->titleLocKey	= $templateArr["titleLocKey"];	//(用于多语言支持）对于标题指定执行按钮所使用的Localizable.strings,仅支持IOS8.2以上版本
		}
		if($templateArr["titleLocArgs"]){
			$alertmsg->titleLocArgs	= $templateArr["titleLocArgs"];	//对于标题, 如果loc-key中使用的占位符，则在loc-args中指定各参数,仅支持IOS8.2以上版本
		}

		$apn->alertMsg				= $alertmsg;
		$apn->badge					= $templateArr["badge"];
		$apn->sound					= $templateArr["sound"];
		foreach($templateArr["add_customMsg"] as $k=>$v){
			$apn->add_customMsg($k,$v);				//增加自定义的数据
		}
		$apn->contentAvailable		= $templateArr["contentAvailable"];
		$apn->category				= $templateArr["category"];
		$template->set_apnInfo($apn);

		return $template;
	}

	function createSign($params,$masterSecret){
		$sign=$masterSecret;
		foreach ($params as $key => $val){
			if (isset($key)  && isset($val) ){
				if(is_string($val) || is_numeric($val) ){ // 针对非 array object 对象进行sign
					$sign .= $key . ($val); //urldecode
				}
			}
		}
		return md5($sign);
	}

	function httpPost($url,$data) {
		$curl = curl_init($url);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1);
		curl_setopt($curl, CURLOPT_USERAGENT, 'GeTui PHP/1.0');
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60);
		curl_setopt($curl, CURLOPT_TIMEOUT, 60);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		//请求失败有3次重试机会
		$result = curl_exec($curl);
		curl_close($curl);
		return $result;
	}
}